package com.example.service;

//为什么创建service包？——需要做增删改查，接口提供数据，不能通过mapper直接查出来给前端吧，必须通关controller接口发送，浏览器才能得到数据
// 所以在controller和mapper之间需要要有一层关系，让它能把数据传过来，怎么去拿到呢？就是中间service层，service层就是帮我们处理数据的

import cn.hutool.core.util.StrUtil;
import com.example.entity.Account;
import com.example.entity.Admin;
import com.example.exception.CustomException;
import com.example.mapper.AdminMapper;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import jakarta.annotation.Resource;
import org.springframework.stereotype.Service;

import java.util.List;

//@Service表示把它标志为spring里面的一个容器，标注为springboot容器里的一个bean
@Service
public class AdminService {

    @Resource
    private AdminMapper adminMapper;//引入AdminMapper，通关它把数据查出来

    public void add(Admin admin) { //合并为管理员新增操作
        String username=admin.getUsername(); //账号，先查用户信息
        Admin dbAdmin=adminMapper.selectByUsername(username);
        if(dbAdmin!=null){//注册账号已存在，无法新增
            throw new CustomException("500","账号已存在，请更换别的账号");
        }
        if(StrUtil.isBlank(admin.getPassword())){//密码没填
            admin.setPassword("admin");
        }
        if(StrUtil.isBlank(admin.getName())){//名字没填
            admin.setName(admin.getUsername());
        }
        //一定要设置角色
        admin.setRole("ADMIN");//管理员的角色
        adminMapper.insert(admin);
    }

    public void update(Admin admin) {
        adminMapper.updateById(admin);
    }

    public void deleteById(Integer id) {
        adminMapper.deleteById(id);
    }

    public void deleteBatch(List<Integer> ids) {
        for (Integer id:ids) {
            this.deleteById(id);
        }
    }

    public List<Admin> selectAll(Admin admin) { //这里面就需要调用mapper帮你查出来了
        //这里还可以写额外的业务操作
        List<Admin> list=adminMapper.selectAll(admin); //此时又需要它帮你去mapper创建selectAll你去实现
        return list;//（补充上面一排：）从contorller到service再到mapper最后到xml这样一步一步往下写，思路会越来越清晰，但创建顺序是反过来的
        //上面两排可以简写：return adminMapper.selectAll();
    }

    public Admin selectById(Integer id) {
        return adminMapper.selectById(id);
    }

    public PageInfo<Admin> selectPage(Admin admin, Integer pageNum, Integer pageSize) {
        PageHelper.startPage(pageNum,pageSize);//原理：官方插件帮你分页，不用写limit，不用计算
        List<Admin> list=adminMapper.selectAll(admin);
        return PageInfo.of(list);
    }

    public Admin login(Account account) { //原来是admin，现在是account，子类不能包含父类
        String username=account.getUsername(); //账号
        Admin dbAdmin=adminMapper.selectByUsername(username);
        if(dbAdmin==null){//没查询到用户 说明没有这个账号
            throw new CustomException("500","账号不存在");
        }
        //数据库存在这个账号
        String password=account.getPassword();
        if(!dbAdmin.getPassword().equals(password)){//用户输入的密码和账号不匹配
            throw new CustomException("500","账号或密码错误");
        }
        return dbAdmin;
    }

}
